#ifndef LOMSTREAMHANDLERHH
#define LOMSTREAMHANDLERHH
#include "lom-typedefs.hh"

namespace lom
{
    class LomInstance;
    class LomClass;
    class LomValue;
    
    class LomDataHandler
    {
    public:
	virtual ~LomDataHandler(){}
	
	/**Begin handling a set of data*/
	virtual void beginHandleData() = 0;
	/**Handle an event*/
	virtual void handle( const TNameStr& name, const TValueVector& values ) = 0;
	/**Handle a new class*/
	virtual void handle( const LomClass& cls ) = 0;
	/**Handle a new instance.  Return the handle used to refer to
	 the new instance.  This allows the stream mechanism to record
	 the differences between the two lom systems and encapsulate
	 them.*/
	virtual THandle handle( const LomInstance& inst ) = 0;
	/**Handle a changed value*/
	virtual void handle( THandle hdl, licada::uint32 index
			     , const LomValue& value ) = 0;
	/**End handling a set of data*/
	virtual void endHandleData() = 0;
    };
}
#endif
